package co.edu.uniandes.bi.etl.audi;

import co.edu.uniandes.bi.etl.Activity;
import co.edu.uniandes.bi.etl.Row;
import co.edu.uniandes.bi.etl.audi.Helpers.FechaDB;
import co.edu.uniandes.bi.etl.audi.Helpers.PaisDB;
import co.edu.uniandes.bi.etl.audi.Helpers.TweetsDB;
import co.edu.uniandes.bi.etl.audi.Helpers.UsuariosDB;

public class CargarTweets extends Activity
{	
	public CargarTweets()
	{
		super();
	}
	
	public void recibirTweets() 
	{
		for (int i = 0; i < input.size(); i++)
		{
			Row r=input.get(i);
			String tweet=(String) r.getField(Constantes.COL_CONTENIDOEVENTO);
			String fecha=(String) r.getField(Constantes.COL_FECHA);
			String nombre = (String) r.getField(Constantes.COL_NOMBRE);
			String nombrePais = (String) r.getField(Constantes.COL_PAIS);
			boolean positivo=(Boolean) r.getField(Constantes.COL_POSITIVO);
			boolean neutral=(Boolean) r.getField(Constantes.COL_NEUTRAL);
			boolean negativo=(Boolean) r.getField(Constantes.COL_NEGATIVO);
			int llavetweet=escribirTweet(tweet);
			int llavefecha=escribirFecha(fecha);
			int llaveusuario=escribirUsuario(nombre);
			int llavepais=escribirPais(nombrePais);
			
			Row outputRow=new Row();
			outputRow.setField(Constantes.COL_POSITIVO, positivo);
			outputRow.setField(Constantes.COL_NEUTRAL, neutral);
			outputRow.setField(Constantes.COL_NEGATIVO, negativo);
			outputRow.setField(Constantes.LLAVE_TWEET, llavetweet);
			outputRow.setField(Constantes.LLAVE_FECHA, llavefecha);
			outputRow.setField(Constantes.LLAVE_USUARIO, llaveusuario);
			outputRow.setField(Constantes.LLAVE_PAIS, llavepais);
			
			output.add(outputRow);
		}
	}
	
	private int escribirUsuario(String nombre)
	{
		UsuariosDB usuarioDB= new UsuariosDB();
		usuarioDB.insertarUsuario(nombre);
		return usuarioDB.darLlaveSurrogada(nombre);
	}
	
	private int escribirPais(String nombrePais)
	{
		PaisDB paisDB= new PaisDB();
		paisDB.insertarPais(nombrePais);
		return paisDB.darLlaveSurrogada(nombrePais);
	}
	
	private int escribirFecha(String fecha)
	{
		String arreglo[]=fecha.split("/");
		String dia=arreglo[0];
		String mes=arreglo[1];
		String anyo=arreglo[2];
		int d=Integer.parseInt(dia);
		int m=Integer.parseInt(mes);
		int a=Integer.parseInt(anyo);
		FechaDB fechaDB = new FechaDB();
		fechaDB.insertarFecha(d, m, a, fecha);
		return fechaDB.darLlaveSurrogada(d, m, a);
	}
	
	private int escribirTweet(String tweet)
	{
		TweetsDB tweetsDB=new TweetsDB();
		tweetsDB.insertarTweet(tweet);
		return tweetsDB.darLlaveSurrogada(tweet);
	}
	
	public void execute() 
	{
		recibirTweets();
		executeNext();
	}
}
